package com.tensquare.article.service;

import com.tensquare.article.dao.ArticleDao;
import com.tensquare.article.pojo.Article;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import util.IdWorker;

import java.util.Date;
import java.util.concurrent.TimeUnit;

@Service
@Transactional
public class ArticleService {
    @Autowired
    private ArticleDao articleDao;
    @Autowired
    private IdWorker idWorker;
    @Autowired
    private RedisTemplate redisTemplate;


    //新增文章
    public void save(Article article){
        article.setId(idWorker.nextId()+"");
        article.setThumbup(0);
        article.setVisits(0);
        article.setComment(0);
        article.setCreatetime(new Date());
        articleDao.save(article);
    }



    //修改状态
    public void updateState(String id){
        articleDao.updateState(id);
    }
    public void  addThumbup(String id){
//        Article article=articleDao.findById(id).get();
//        if (null==article.getThumbup()&&article.getThumbup().equals("")){
//        article.setThumbup(0);
//        //在jpa里面，这个save就像相当于修改
//        articleDao.save(article);
//        }
        articleDao.addThumbup(id);
    }


    //通过id查询这个业务访问太过频繁，我们要增加一个缓存的机制
    public Object findById(String id){
        //当程序访问到这里的时候，第一步先从缓存查看
        Article article=(Article) redisTemplate.opsForValue().get("article_"+id);
        //如果缓存中存在，直接调用缓存
        if (null==article){
            //如果缓存没有怎么办
            //从数据库拿数据，并且放入缓存当中
            article=articleDao.findById(id).get();
            //存入到缓存中
          redisTemplate.opsForValue().set("article_"+id,article,10, TimeUnit.HOURS);

        }
        return article;



    }

}
